package company.huawei.od;

import java.util.*;
import java.util.stream.Collectors;

/**
 * Created with IntelliJ IDEA.
 * Author: Amos
 * E-mail: amos@amoscloud.com
 * Date: 2021/9/7
 * Time: 15:30
 * Description: 85%
 */
public class Main82 {
    /*

    给出一个只包含字母的字符串,
    不包含空格,统计字符串中各个子字母(区分大小写)出现的次数,
    并按照字母出现次数从大到小的顺序输出各个字母及其出现次数
    如果次数相同,按照自然顺序排序,且小写字母在大写字母之前

    输入描述:
      输入一行仅包含字母的字符串

    输出描述:
      按照字母出现次数从大到小的顺序输出各个字母和字母次数,
      用英文分号分割,
      注意末尾的分号
      字母和次数中间用英文冒号分隔

    示例:
        输入: xyxyXX
        输出:x:2;y:2;X:2;
    说明:每个字符出现的次数为2 故x排在y之前
    而小写字母x在大写X之前

    示例2:
        输入:
         abababb
        输出:
            b:4;a:3
        说明:b的出现个数比a多 故排在a前
     */
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        in.close();
        char[] chars = str.toCharArray();
        if (chars.length <= 0) {
            System.out.println("");
            return;
        }
        Map<Character, Integer> map = new HashMap<>();
        for (char item : chars) {
            map.compute(item, (k, v) -> {
                if (Objects.isNull(v)) return 1;
                return v + 1;
            });
        }
        String collect = map.entrySet().stream()
                .map(item -> item.getKey() + ":" + item.getValue())
                .sorted((v1, v2) -> {
                    String[] split1 = v1.split(":");
                    String[] split2 = v2.split(":");
                    if (!split1[1].equals(split2[1])) return Integer.parseInt(split1[1]) - Integer.parseInt(split2[1]);
                    char s1 = split1[0].toCharArray()[0];
                    char s2 = split2[0].toCharArray()[0];
                    if ((s1 <= 'Z' && s2 <= 'Z') || (s1 >= 'a' && s2 >= 'a')) {
                        return s1 - s2;
                    } else {
                        if (s1 <= 'z') return -1;
                        return 1;
                    }
                })
                .collect(Collectors.joining(";"));
        System.out.println(collect);
    }
}
